import jwt from "jsonwebtoken";


/**
 * 
 * @param {Object} data - 要存储在令牌中的数据（不建议存放敏感信息）
 * @param {string} secretKey - 用于签名的密钥
 * @param {string} time - 令牌过期时间,如 '1h'、'7d' 或秒数
 * @returns {string} 生成的JWT令牌
 */
export function setToken(data={}, secretKey='chancms', time='7d') {
  try {
    return jwt.sign(data, secretKey, {
      expiresIn: time,
      algorithm: 'HS256',
    });
  } catch (error) {
    console.error('令牌生成失败:', error.message);
    throw new Error(`生成令牌失败: ${error.message}`);
  }
}

// 获取token
export async function getToken(token, secretKey='chancms') {
  return new Promise((resolve, reject) => {
    jwt.verify(token, secretKey,(err, decode) => {
      if (err) {
       let errorMessage = '令牌验证失败';
       if (err.name === 'TokenExpiredError') {
         errorMessage = '令牌已过期';
       } else if (err.name === 'JsonWebTokenError') {
         errorMessage = '无效的令牌';
       }
       console.error(errorMessage, '令牌异常信息:', err.message);
       return reject(new Error(errorMessage));
      } else {
        resolve(decode);
      }
    });
  });
}